package com.hmall.common.config;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.math.BigInteger;

/**
 * JSON配置类
 * 主要用于定制 Jackson 的对象映射行为
 * 条件装配，项目中用到JSON才会装配，也就是ObjectMapper类
 */
@ConditionalOnClass(ObjectMapper.class)
public class JsonConfig {

    /**
     * 将 Long 和 BigInteger 类型的字段在序列化时转换为字符串。
     * 默认情况下，这些类型会被序列化为数字，如果你希望它们以字符串形式输出，可以使用 ToStringSerializer.instance。
     * @return
     */
    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
        return jacksonObjectMapperBuilder -> {
            // long -> string
            jacksonObjectMapperBuilder.serializerByType(Long.class, ToStringSerializer.instance);
            jacksonObjectMapperBuilder.serializerByType(BigInteger.class, ToStringSerializer.instance);
        };
    }

}
